/***************************************************************************************************
*FileName:
*Description:
*Author: xsx_kair
*Data:
***************************************************************************************************/

/***************************************************************************************************/
/******************************************Header List********************************************/
/***************************************************************************************************/
#include	"LwipClient_Task.h"
#include	"Client_Fun.h"
#include	"MyMem.h"

#include    "lwip.h"
#include    "lwip/api.h"
#include 	"lwip/tcp.h"

#include 	"FreeRTOS.h"
#include 	"task.h"

#include	<string.h>
/***************************************************************************************************/
/***************************************************************************************************/
/***************************************************************************************************/

/***************************************************************************************************/
/***************************************************************************************************/
/***************************************************************************************************/

/***************************************************************************************************/
/***************************************************************************************************/
/***************************************************************************************************/
/****************************************File Start*************************************************/
/***************************************************************************************************/
/***************************************************************************************************/

BaseType_t createNewClientTask(struct netconn *new_conn, unsigned short id)
{
    return xTaskCreate(clientTask, NULL, 256, new_conn, 3, NULL);
}

void clientTask(void *pvParameters)
{
	err_t err;
    struct netconn *new_conn = pvParameters;
    struct netbuf *pxRxBuffer;
    unsigned char * recv_buf = NULL;
	unsigned short recv_len;
	
	while(1)
	{
		err = netconn_recv(new_conn, &pxRxBuffer);

		if(err == ERR_OK)
		{
            recv_len = netbuf_len(pxRxBuffer);
            recv_buf = MyMalloc(recv_len);
            if(recv_buf){
                memset(recv_buf, 0, recv_len);
                netbuf_copy(pxRxBuffer, (char *)recv_buf, recv_len);
                
                rx_Handle(new_conn, recv_buf, recv_len);
            }
            netbuf_delete(pxRxBuffer);
		} else if(err != ERR_TIMEOUT) {
            netconn_close(new_conn);
            netconn_delete(new_conn);
            vTaskDelete(NULL);
        }
        vTaskDelay(10);
	}
}

/****************************************end of file************************************************/
